Generally, conventional networks include a plurality of interconnected network devices, e.g., switches, routers, etc., that are each configured to receive and to forward packets and/or frames according to respective internal settings. These internal settings are generally configured at provisioning and may require physical access to the network device in order to change settings. In some cases, the configurations may be proprietary. Further, the network devices are typically configured with only a local view of a portion of the network, e.g., for fault tolerance. Each network device is configured to make routing and/or forwarding decisions based on this local view. Thus, such network devices may not be responsive to dynamically changing network traffic, changes to node(s) coupled to the network nor to mobility of user devices connected to the network.
Software-defined networking (SDN) is intended to address many of these characteristics of such conventional network architectures. SDN is designed to decouple the data plane (i.e., the network devices) from the control plane (e.g., routing decision rules and policies). In SDN, the control plane may be centralized and/or may be distributed and the data plane includes a plurality of interconnected network devices that are remotely programmable by the control plane.
An SDN controller may be configured to monitor network traffic and/or state(s) of the node(s). The SDN controller may execute on a server located at a data center, for example. The SDN controller is configured to have a centralized global view of the network and is further configured to program the network devices dynamically, based, at least in part, on network traffic, state(s) of the node(s) and/or policies set by, e.g., network administrators. The network devices are generally configured with a standardized programming interface making programming and reprogramming them relatively straightforward and not restricted to vendor-specific protocols. Thus, a SDN network architecture is configured to be dynamically reprogrammable by SDN controllers based, at least in part, on business enterprise policies.
SDN controllers are typically implemented as a computer program executing on, for example, a server in a data center. The server may include a host and a network interface coupled to the host. An SDN controller is typically configured to perform SDN controller operations on the host and to transmit and/or receive network-related data via the network interface. The SDN controller may include a plurality of architectural elements configured to facilitate monitoring and control of the physical network and its associated network devices. These elements of an SDN controller may typically be written in a relatively high level object-oriented language such as Java. For example, networking logic, i.e., creating objects and making logical decisions based on policies, are generally easier to implement in a high-level language.
For example, the policies may be written in an extensible markup language (XML) configured to encode the policies in a format that is both human-readable and machine-readable. It is generally desirable for the SDN controller elements “closest” to the network devices to be efficiently coded. High level computer languages are typically designed for ease of programming and/or readability rather than efficiency, thus, generating efficient executable code for SDN controller elements closer to network devices may take considerable time and effort.
Although the following Detailed Description will proceed with reference being made to illustrative embodiments, many alternatives, modifications, and variations thereof will be apparent to those skilled in the art.